# 文件名: ex6_playwright
# 当前用户: shiping.zheng
# 当前日期: 2025/1/10
# 当前时间: 13:44
# 项目名称: Flag
"""
模块描述:
    playwright配置浏览器默认配置项
    1.代码模块写入配置
    2.json文件配置
    3.yaml文件配置
"""
import asyncio
from playwright.async_api import async_playwright
from PIL import Image
import pytesseract
import time
import pygetwindow as gw
import json
import yaml
# 定义统一的配置项
playwright_config = {
    'browser': {
        'headless': False,  # 是否无头模式
        'slow_mo': 50       # 减慢操作速度（毫秒）
    },
    'context': {
        'viewport': {'width': 1920, 'height': 1080},  # 视口大小
        'user_agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
        'locale': 'zh-CN',                            # 语言
        'geolocation': {'longitude': 12.4924, 'latitude': 41.8902},  # 地理位置
        'permissions': ['geolocation']                # 权限
    }
}
async def main():
    # config = playwright_config
    # 加载json文件中的配置
    # config = load_jsconfig('playwright_config.json')
    # 加载yaml文件中的配置
    config = load_ymconfig('playwright_config.yaml')
    async with async_playwright() as p:
        # 使用配置项启动浏览器
        browser = await p.chromium.launch(**config['browser'])
        # 使用配置项创建上下文
        context = await browser.new_context(**config['context'])
        # 使用配置项启动浏览器
        # browser = await p.chromium.launch(**playwright_config['browser'])
        # # 使用配置项创建上下文
        # context = await browser.new_context(**playwright_config['context'])
        page = await context.new_page()
        await page.goto("https://xuntian-test2.tclpv.com/getechLogin")
        maximize_current_window()
        await page.get_by_placeholder("请输入用户名").fill("admin")
        await page.get_by_placeholder("请输入密码").fill("tcl111")
        # 使用角色选择器定位验证码图片
        captcha_element = page.get_by_role("img")
        # await captcha_element.click()
        # 获取图片位置
        bounding_box = await captcha_element.bounding_box()  # 确保使用 await
        print("Captcha position:", bounding_box)
        # 保存验证码图片
        await captcha_element.screenshot(path=r'C:\Users\shiping.zheng\Desktop\image\captcha.png')
        # 使用 Tesseract 识别验证码
        captcha_image = Image.open(r'C:\Users\shiping.zheng\Desktop\image\captcha.png')
        captcha_text = pytesseract.image_to_string(captcha_image).strip()  # 去除空格和换行
        print("Captcha text:", captcha_text)
        await page.get_by_placeholder("请输入左图结果").fill(captcha_text)
        await page.get_by_role("button", name="登录").click()
        # 等待网络加载完成
        await page.wait_for_load_state('networkidle')
        # 保存 cookies
        cookies = await context.cookies()
        print("Saved cookies:", cookies)
        # 关闭第一个上下文
        await context.close()

        # 第二个上下文：加载 cookies 并访问页面
        second_context = await browser.new_context()
        await second_context.add_cookies(cookies)
        page2 = await second_context.new_page()
        await page2.goto('https://xuntian-test2.tclpv.com/operationCenter/equipmentCenter')
        # 检查是否登录成功
        await page2.wait_for_load_state('networkidle')
        print("Page loaded with cookies")
        # 关闭第二个上下文
        await second_context.close()
        # 关闭浏览器
        await browser.close()

def maximize_current_window():
    """
    获取当前活动窗口并将其最大化。
    """
    # 获取当前活动窗口
    current_window = gw.getActiveWindow()
    # 检查是否成功获取到窗口
    if current_window:
        print(f"当前窗口标题: {current_window.title}")
        # 最大化窗口
        current_window.maximize()
        print("窗口已最大化")
    else:
        print("未能获取当前活动窗口")

# 读取 JSON 配置文件
def load_jsconfig(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        return json.load(file)  # 使用 json.load() 读取文件内容

# 读取 YAML 配置文件
def load_ymconfig(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        return yaml.safe_load(file)

asyncio.run(main())